// src/types/dataAnalysis.ts

// 滤波器配置接口
export interface FilterConfig {
  filterPreset: string
  usePhaseCorrection: boolean
  prototype: 'butterworth' | 'chebyshev' | 'elliptic'
  order: number
  ripple: string
  filterType: 'lowpass' | 'highpass' | 'bandpass' | 'bandstop'
  fc1: string
  fc2: string
  selectedFilter: string
  filterName: string
  filterDescription: string
  filterUnit: string
  color: string
}

// 计算配置接口
export interface CalculationConfig {
  inputChannel: string
  calcType1: 'block' | 'continuous' | 'singleValue' | 'singleTrigger' | 'doubleTrigger'
  calcType2: 'time' | 'sample'
  blockSize: number
  overlapType: 'percent' | 'absolute'
  overlapValue: number
  perSample: boolean
  triggerChannel?: string
  triggerMode?: string
  triggerDirection?: 'positive' | 'negative'
  triggerValue?: number
  startTriggerChannel?: string
  startTriggerMode?: string
  startTriggerDirection?: 'positive' | 'negative'
  startTriggerValue?: number
  stopTriggerChannel?: string
  stopTriggerMode?: string
  stopTriggerDirection?: 'positive' | 'negative'
  stopTriggerValue?: number
  outputParams: string[]
  outputName: string
  outputDesc: string
  outputUnit: string
  outputColor: string
}

// 完整配置接口
export interface AnalysisConfig {
  filterConfig: FilterConfig
  calculationConfig: CalculationConfig
}

// 常量定义
export const CALC_TYPE1_OPTIONS = [
  { value: 'block', label: '基于块' },
  // { value: 'continuous', label: '连续的' },
  // { value: 'singleValue', label: '单一值' },
  // { value: 'singleTrigger', label: '单条件触发' },
  // { value: 'doubleTrigger', label: '双条件触发' }
]

export const CALC_TYPE2_OPTIONS = [
  { value: 'time', label: '基于时间' },
  // { value: 'sample', label: '基于采样点' }
]

export const TRIGGER_MODES = [
  '单边', '滤波沿', '窗', '脉冲宽度', '窗及脉冲宽度', '斜度', '幅值变化'
]

export const BLOCK_SIZE_OPTIONS = [0.1, 0.5, 1, 2, 5]

export const OUTPUT_OPTIONS = [
  { label: 'RMS', value: 'RMS' },
  { label: '最小值', value: 'min' },
  // { label: '最小值点时间', value: 'minTime' },
  { label: '中位值', value: 'median' },
  // { label: '二次RMS', value: 'rms2' },
  { label: '最大值', value: 'max' },
  // { label: '最大值点时间', value: 'maxTime' },
  { label: '峰度', value: 'kurtosis' },
  // { label: 'ACRMS', value: 'acrms' },
  // { label: '峰值', value: 'peak' },
  { label: '方差', value: 'variance' },
  { label: '偏度', value: 'skewness' },
  { label: '平均值', value: 'mean' },
  { label: '峰峰值', value: 'peakToPeak' },
  // { label: '标准偏差', value: 'stdDev' },
  { label: 'Margin factor', value: 'marginFactor' },
  // { label: '累计值', value: 'cumulative' },
  { label: '波峰因数', value: 'crestFactor' },
  { label: 'Coeffcient of Variation', value: 'coeffVariation' }
]

// FFT相关类型定义
export interface FFTChannel {
  id: string;
  name: string;
}

export interface FFTSettings {
  // 通道设置
  channels: FFTChannel[];
  selectedChannels: string[];
  searchQuery: string;
  
  // 频谱输出
  spectrumOutputs: string[];
  selectedSpectrumOutputs: string[];
  
  // 幅值设置
  amplitudeOptions: string[];
  amplitudeType: string;
  
  // 窗函数
  windowOptions: string[];
  windowType: string;
  
  // 分辨率设置
  selectedParamType: 'lines' | 'df' | 'duration';
  selectedValue: number;
  paramOptions: {
    lines: { value: number; display: string }[];
    df: { value: number; display: string }[];
    duration: { value: number; display: string }[];
  };
  overlapValue: number;
  overlapOptions: number[];
  
  // 平均模式设置
  selectedMode: string;
  modeOptions: string[];
  selectedOverallType: string;
  overallTypes: string[];
  selectedBlockType: string;
  blockTypes: string[];
  blockValue: number;
  
  // 直流分量
  dcEnabled: boolean;
  dcValue: number;
  dcValues: number[];
  
  // 高级设置
  amplitudeFunction: string;
  amplitudeFunctions: string[];
  frequencyWeighting: string;
  frequencyWeightings: string[];
  crosspowerEnabled: boolean;
  referenceSignal: string;
  referenceSignalsOptions: string[];
  frequencyUnit: string;
  frequencyUnits: string[];
  limitRangeEnabled: boolean;
  frequencyRange: number;
  
  // 输出控制
  outputControlEnabled: boolean;
  outputValue: number;
  outputUnit: string;
  outputUnits: string[];
  
  // 标量设置
  scalarTypes: string[];
  selectedScalars: string[];
  fullRange: boolean;
  customRange: boolean;
  startFreq: number;
  endFreq: number;
  
  // 谐波设置
  harmonicInterpolation: boolean;
  thdEnabled: boolean;
  harmonicValue: number;
  frequencyType: string;
  frequencyTypes: { value: string; label: string }[];
}

// 默认FFT设置
export const DEFAULT_FFT_SETTINGS: FFTSettings = {
  channels: [
    { id: 'AI1', name: 'AI 1' },
    { id: 'AI2', name: 'AI 2' },
    { id: 'AI2_Filter', name: 'AI 2/Filter' },
    { id: 'AI1_Filter', name: 'AI 1/Filter' },
    { id: 'AI1_MIN', name: 'AI 1/MIN' },
    { id: 'AI1_MAX', name: 'AI 1/MAX' },
    { id: 'AI1_PEAK', name: 'AI 1/PEAK' },
    { id: 'AI1_Filter_MIN', name: 'AI 1/Filter/MIN' },
    { id: 'AI1_Filter_MAX', name: 'AI 1/Filter/MAX' },
    { id: 'AI1_Filter_PEAK', name: 'AI 1/Filter/PEAK' }
  ],
  selectedChannels: [],
  searchQuery: '',
  spectrumOutputs: ['峰值', 'Max.hold', '复数'],
  selectedSpectrumOutputs: [],
  amplitudeOptions: ['峰值', '峰峰值', 'Rms'],
  amplitudeType: '峰值',
  windowOptions: ['Rectangular', 'Blackman窗', '汉宁窗', '海明窗', '平顶窗', 'Triangle', 'Exponent down', 'Transient', 'Blackman-Harris', 'Kaiser-Bessel'],
  windowType: 'Blackman窗',
  selectedParamType: 'lines',
  selectedValue: 1024,
  paramOptions: {
    lines: [
      { value: 128, display: '128' },
      { value: 256, display: '256' },
      { value: 512, display: '512' },
      { value: 1024, display: '1K' },
      { value: 2048, display: '2K' },
      { value: 4096, display: '4K' },
      { value: 8192, display: '8K' },
      { value: 16384, display: '16K' },
      { value: 32768, display: '32K' },
      { value: 65536, display: '64K' }
    ],
    df: [
      { value: 0.01, display: '0.0100' },
      { value: 0.02, display: '0.0200' },
      { value: 0.05, display: '0.0500' },
      { value: 0.1, display: '0.1000' },
      { value: 0.2, display: '0.2000' },
      { value: 0.5, display: '0.5000' },
      { value: 1.0, display: '1.0000' },
      { value: 2.0, display: '2.0000' },
      { value: 5.0, display: '5.0000' },
      { value: 10.0, display: '10.0000' },
      { value: 9.7656, display: '9.7656' },
      { value: 78.125, display: '78.1250' },
      { value: 200.0, display: '200.0000' }
    ],
    duration: [
      { value: 0.1024, display: '0.1024' }
    ]
  },
  overlapValue: 0,
  overlapOptions: [0, 10, 25, 50, 66.7, 75, 90],
  selectedMode: '不平均',
  modeOptions: ['不平均', '基于块', 'Overall'],
  selectedOverallType: '线性',
  overallTypes: ['线性', '能量', 'Energy (exp.)', '最大值'],
  selectedBlockType: '线性',
  blockTypes: ['线性', '能量', 'Energy (exp.)', '最大值'],
  blockValue: 1,
  dcEnabled: false,
  dcValue: 0.1,
  dcValues: [0.1, 0.2, 1, 2, 10],
  amplitudeFunction: 'Lin (Z)',
  amplitudeFunctions: ['线性', 'Power', '功率谱密度', 'ESD', 'ASD'],
  frequencyWeighting: 'Power',
  frequencyWeightings: ['Lin (Z)', 'A', 'B', 'C', 'D'],
  crosspowerEnabled: false,
  referenceSignal: '<未指定>',
  referenceSignalsOptions: ['<未指定>'],
  frequencyUnit: 'Hz',
  frequencyUnits: ['Hz', 'rpm', 'cpm'],
  limitRangeEnabled: false,
  frequencyRange: 10000.0,
  outputControlEnabled: false,
  outputValue: 10,
  outputUnit: '块',
  outputUnits: ['块', '秒'],
  scalarTypes: ['Rms', '峰值', '峰峰值'],
  selectedScalars: [],
  fullRange: false,
  customRange: false,
  startFreq: 0.0,
  endFreq: 10000.0,
  harmonicInterpolation: false,
  thdEnabled: false,
  harmonicValue: 0,
  frequencyType: 'spectrum',
  frequencyTypes: [
    { value: 'spectrum', label: '基于频谱' },
    { value: 'fixed', label: '固定' },
    { value: 'channel', label: '跟随通道' }
  ]
};
// src/apis/fft/fft.ts

import http from '@/utils/http'

/**
 * 通道信息接口
 * @property id - 通道的唯一标识符
 * @property name - 通道的显示名称
 */
export interface Channel {
    id: string;
    name: string;
}

/**
 * 参数选项接口
 * @property value - 参数的实际数值
 * @property display - 在界面上显示的文本
 */
export interface ParamOption {
    value: number;
    display: string;
}

/**
 * 参数选项集合接口
 * 包含三种类型的参数选项：
 * @property lines - 线数相关选项
 * @property df - 频率分辨率(Df)相关选项
 * @property duration - 块时长相关选项
 */
export interface ParamOptions {
    lines: ParamOption[];
    df: ParamOption[];
    duration: ParamOption[];
}

/**
 * 频率类型选项接口
 * @property value - 频率类型的实际值
 * @property label - 在界面上显示的标签文本
 */
export interface FrequencyType {
    value: string;
    label: string;
}

/**
 * FFT分析设置的核心数据结构接口
 * 包含所有FFT分析所需的配置参数和状态
 */
export interface FFTData {
    // === 高级设置相关属性 ===
    /** 当前可用的参照信号选项列表 */
    referenceSignalsOptions: string[];
    /** 所有可用的参照信号列表 */
    fullReferenceSignals: string[];
    /** 频率单位选项（Hz, rpm等） */
    frequencyUnits: string[];

    // === 谐波分析相关属性 ===
    /** 是否启用谐波插值 */
    harmonicInterpolation: boolean;
    /** 是否启用THD（总谐波失真）计算 */
    thdEnabled: boolean;
    /** 谐波分析的谐波数量 */
    harmonicValue: number;
    /** 当前选择的频率类型 */
    frequencyType: string;
    /** 可用的频率类型选项 */
    frequencyTypes: FrequencyType[];

    // === 标量输出相关属性 ===
    /** 标量输出类型选项 */
    scalarTypes: string[];
    /** 当前选择的标量输出类型 */
    selectedScalars: string[];
    /** 是否使用全频率范围 */
    fullRange: boolean;
    /** 是否使用自定义频率范围 */
    customRange: boolean;
    /** 自定义频率范围的起始频率 */
    startFreq: number;
    /** 自定义频率范围的结束频率 */
    endFreq: number;
    /** 上次设置的自定义频率范围 */
    lastRange: { start: number; end: number };

    // === 输出控制相关属性 ===
    /** 是否启用输出控制 */
    outputControlEnabled: boolean;
    /** 输出控制的值 */
    outputValue: number;
    /** 输出控制的临时值（用于编辑状态） */
    tempOutputValue: number;
    /** 输出控制的单位 */
    outputUnit: string;
    /** 输出控制单位选项 */
    outputUnits: string[];
    /** 输出控制的最大值 */
    maxOutputValue: number;

    // === 频率范围限制相关属性 ===
    /** 是否启用频率范围限制 */
    limitRangeEnabled: boolean;
    /** 频率范围限制值 */
    frequencyRange: number;
    /** 频率范围限制的临时值（用于编辑状态） */
    tempFrequency: number;

    // === 交叉谱分析相关属性 ===
    /** 是否启用交叉谱分析 */
    crosspowerEnabled: boolean;
    /** 当前选择的参照信号 */
    referenceSignal: string;

    // === 通用设置 ===
    /** 当前选择的频率单位 */
    frequencyUnit: string;
    /** 当前选择的幅值功能 */
    amplitudeFunction: string;
    /** 可用的幅值功能选项 */
    amplitudeFunctions: string[];
    /** 当前选择的频率计权 */
    frequencyWeighting: string;
    /** 可用的频率计权选项 */
    frequencyWeightings: string[];

    // === 块处理相关参数 ===
    /** 基于块的能量计算中的Tau值 */
    blockTau: number;
    /** 整体模式下的Tau值 */
    overallTau: number;

    // === 分辨率设置核心参数 ===
    /** 当前选择的FFT线数 */
    selectedLines: number;
    /** 当前选择的频率分辨率(Df) */
    selectedDf: number;
    /** 当前选择的块时长 */
    selectedDuration: number;
    /** 系统采样率（Hz） */
    sampleRate: number;

    // === 分辨率设置UI状态 ===
    /** 当前选择的参数类型（线数/频率分辨率/块时长） */
    selectedParamType: keyof ParamOptions;
    /** 当前选择的参数值 */
    selectedValue: number;
    /** 不同参数类型的选项列表 */
    paramOptions: ParamOptions;

    // === 重叠与模式设置 ===
    /** 当前选择的重叠百分比 */
    overlapValue: number;
    /** 可用的重叠百分比选项 */
    overlapOptions: number[];

    // === 直流分量控制 ===
    /** 是否启用去除直流分量 */
    dcEnabled: boolean;
    /** 去除直流分量的频率阈值 */
    dcValue: number;
    /** 可用的直流分量阈值选项 */
    dcValues: number[];

    // === 界面选项卡状态 ===
    /** 可用的选项卡名称 */
    tabs: string[];
    /** 当前激活的选项卡 */
    activeTab: string;

    // === 通道选择相关 ===
    /** 通道搜索关键词 */
    searchQuery: string;
    /** 所有可用通道列表 */
    channels: Channel[];
    /** 当前选中的通道ID列表 */
    selectedChannels: string[];

    // === 频谱输出设置 ===
    /** 可用的频谱输出类型 */
    spectrumOutputs: string[];
    /** 当前选择的频谱输出类型 */
    selectedSpectrumOutputs: string[];

    // === 幅值设置 ===
    /** 可用的幅值类型选项 */
    amplitudeOptions: string[];
    /** 当前选择的幅值类型 */
    amplitudeType: string;

    // === 窗函数设置 ===
    /** 可用的窗函数选项 */
    windowOptions: string[];
    /** 当前选择的窗函数 */
    windowType: string;

    // === 平均模式设置 ===
    /** 当前选择的平均模式 */
    selectedMode: string;
    /** 可用的平均模式选项 */
    modeOptions: string[];

    // === 整体(Overall)模式设置 ===
    /** 整体模式下选择的类型 */
    selectedOverallType: string;
    /** 整体模式下可用的类型选项 */
    overallTypes: string[];

    // === 基于块(Block-based)模式设置 ===
    /** 基于块模式下选择的类型 */
    selectedBlockType: string;
    /** 基于块模式下可用的类型选项 */
    blockTypes: string[];
    /** 基于块模式下的块大小 */
    blockValue: number;
}

/**
 * FFT分析设置的默认配置
 * 包含所有配置参数的初始值
 */
export const defaultFFTData: FFTData = {
    referenceSignalsOptions: ['<未指定>'],
    // 默认参照信号列表
    fullReferenceSignals: [
        'AI 1',
        'AI 2',
        'AI 2/Filter',
        'AI 1/Filter'
    ],

    // 默认频率单位选项
    frequencyUnits: ['Hz', 'rpm', 'cpm'],

    // 谐波分析默认状态
    harmonicInterpolation: false,
    thdEnabled: false,
    harmonicValue: 0,
    frequencyType: 'spectrum',
    frequencyTypes: [
        { value: 'spectrum', label: '基于频谱' },
        { value: 'fixed', label: '固定' },
        { value: 'channel', label: '跟随通道' }
    ],

    // 标量输出默认设置
    scalarTypes: ['Rms', '峰值', '峰峰值'],
    selectedScalars: [],
    fullRange: false,
    customRange: false,
    startFreq: 0.0,
    endFreq: 10000.0,
    lastRange: { start: 0.0, end: 10000.0 },

    // 输出控制默认设置
    outputControlEnabled: false,
    outputValue: 10,
    tempOutputValue: 10,
    outputUnit: '块',
    outputUnits: ['块', '秒'],
    maxOutputValue: 1000000000,

    // 频率范围限制默认设置
    limitRangeEnabled: false,
    frequencyRange: 10000.0,
    tempFrequency: 10000.0,

    // 交叉谱分析默认设置
    crosspowerEnabled: false,
    referenceSignal: '<未指定>',

    // 通用设置默认值
    frequencyUnit: 'Hz',
    amplitudeFunction: 'Lin (Z)',
    amplitudeFunctions: ['线性', 'Power', '功率谱密度', 'ESD', 'ASD'],
    frequencyWeighting: 'Power',
    frequencyWeightings: ['Lin (Z)', 'A', 'B', 'C', 'D'],

    // 块处理参数默认值
    blockTau: 1.0,
    overallTau: 1.0,

    // 分辨率核心参数默认值
    selectedLines: 1024,
    selectedDf: 9.7656,
    selectedDuration: 0.1024,
    sampleRate: 10000, // 10kHz采样率

    // 分辨率UI状态默认值
    selectedParamType: 'lines',
    selectedValue: 1024,
    paramOptions: {
        lines: [
            { value: 128, display: '128' },
            { value: 256, display: '256' },
            { value: 512, display: '512' },
            { value: 1024, display: '1K' },
            { value: 2048, display: '2K' },
            { value: 4096, display: '4K' },
            { value: 8192, display: '8K' },
            { value: 16384, display: '16K' },
            { value: 32768, display: '32K' },
            { value: 65536, display: '64K' }
        ],
        df: [
            { value: 0.01, display: '0.0100' },
            { value: 0.02, display: '0.0200' },
            { value: 0.05, display: '0.0500' },
            { value: 0.1, display: '0.1000' },
            { value: 0.2, display: '0.2000' },
            { value: 0.5, display: '0.5000' },
            { value: 1.0, display: '1.0000' },
            { value: 2.0, display: '2.0000' },
            { value: 5.0, display: '5.0000' },
            { value: 10.0, display: '10.0000' },
            { value: 9.7656, display: '9.7656' },  // 对应1024线数@10kHz采样率
            { value: 78.125, display: '78.1250' }, // 对应128线数@10kHz采样率
            { value: 200.0, display: '200.0000' }
        ],
        duration: [
            { value: 0.1024, display: '0.1024' } // 1024线数@10kHz采样率
        ],
    },

    // 重叠与模式默认设置
    overlapValue: 0,
    overlapOptions: [0, 10, 25, 50, 66.7, 75, 90],

    // 直流分量控制默认设置
    dcEnabled: false,
    dcValue: 0.1,
    dcValues: [0.1, 0.2, 1, 2, 10],

    // 界面选项卡默认状态
    tabs: ['基本', '高级', '标量'],
    activeTab: '基本',

    // 通道选择默认状态
    searchQuery: '',
    channels: [
        { id: 'AI1', name: 'AI 1' },
        { id: 'AI2', name: 'AI 2' },
        { id: 'AI2_Filter', name: 'AI 2/Filter' },
        { id: 'AI1_Filter', name: 'AI 1/Filter' },
        { id: 'AI1_MIN', name: 'AI 1/MIN' },
        { id: 'AI1_MAX', name: 'AI 1/MAX' },
        { id: 'AI1_PEAK', name: 'AI 1/PEAK' },
        { id: 'AI1_Filter_MIN', name: 'AI 1/Filter/MIN' },
        { id: 'AI1_Filter_MAX', name: 'AI 极/Filter/MAX' },
        { id: 'AI1_Filter_PEAK', name: 'AI 1/Filter/PEAK' }
    ],
    selectedChannels: [],

    // 频谱输出默认设置
    spectrumOutputs: ['峰值', 'Max.hold', '复数'],
    selectedSpectrumOutputs: [],

    // 幅值设置默认值
    amplitudeOptions: ['峰值', '峰峰值', 'Rms'],
    amplitudeType: '峰值',

    // 窗函数默认设置
    windowOptions: [
        'Rectangular', 'Blackman窗', '汉宁窗', '海明窗', '平顶窗',
        'Triangle', 'Exponent down', 'Transient', 'Blackman-Harris', 'Kaiser-Bessel'
    ],
    windowType: 'Blackman窗', // 默认使用Blackman窗

    // 平均模式默认设置
    selectedMode: '不平均',
    modeOptions: ['不平均', '基于块', 'Overall'],

    // 整体模式默认设置
    selectedOverallType: '线性',
    overallTypes: ['线性', '能量', 'Energy (exp.)', '最大值'],

    // 基于块模式默认设置
    selectedBlockType: '线性',
    blockTypes: ['线性', '能量', 'Energy (exp.)', '最大值'],
    blockValue: 1 // 默认块大小为1
};

// 导出FFTData类型
